clear all;
close all;
printf("\n\n");
printf("================================================================================\n");
printf("====                    TRABALHO DE COMUNICACAO DE DADOS                    ====\n");
printf("====                      Cassio Tatsch - 30/04/2012                        ====\n");
printf("====       Adaptado por: Carlos F. Bublitz e Luis Duarte - 22/10/2012       ====\n");
printf("================================================================================\n");
%Calculos retirados de exemplos do site www.mathworks.com e trabalhos disponibilizado (Ivan)
%http://www.mathworks.com/matlabcentral/fileexchange/14410-ask-ook-fsk-bpsk-qpsk-8psk-modulations
%http://www.mathworks.com/matlabcentral/newsreader/view_thread/151700
%http://www.mathworks.com/matlabcentral/fileexchange/12691-bpsk-modulation

%-------------------------------------------
% Tipo de fonte de informação
%-------------------------------------------

tipoFonte = input("\nEscolha o tipo de fonte de dados que deseja e depois pressione [ENTER]:\n[1] Texto\n[2] Arquivo de Audio \n");

%-------------------------------------------
% Fonte de Sinal
%-------------------------------------------

if (tipoFonte == 1)
		palavra=input("\n\nInforme uma palavra a ser transmitida: ", "s");

		%-------------------------------------------
		% Codificação de Fonte
		%-------------------------------------------
		s_bit="";

		for i=1:length(palavra)
			s_bit = strcat(s_bit,dec2bin(double(palavra(i)),8));
		endfor

		bit_stream=[];

		for i=1:length(s_bit)
			if(s_bit(i)=='0')
				bit_stream(i) =0;
			else
				bit_stream(i) =1;
			endif
		endfor

		printf("\nA sequência binária da palavra é: %s\n");
		bit_stream % Original

elseif (tipoFonte ==2)
		 num=0;
		 arq=input("\n\nInforme o nome do arquivo de audio (.wav) a ser transmitido: ", "s");
		 num=input("\n\nInforme o numero de amostras que deseja: ");
			 [ArquivoAudio, FS, BPS] = wavread(arq,num);
			 y=ArquivoAudio;
			 thresh = 0; 
			 sqwave = y; 
			 sqwave(sqwave >= thresh) = 1;
			 sqwave(sqwave < thresh) = 0;  
			 
			 bit_stream=sqwave;
endif

%-------------------------------------------
% Declaração de Variaveis Utilizadas
%-------------------------------------------
A = 1;											% Amplitude Nivel Alto (1)
A2 = 0.5; 										% Amplitude Nivel Baixo (0)
polar = [ -A +A ];								% Mapeamento dos Polos
M = 32;											% Taxa de amostragem 
T_bits = length(bit_stream);					% Duração da sequencia de bits
t = 1/M:1/M:T_bits ;							% gera o tempo de amostragem por bit									
Rb=100; 										% bits por segundo
bit_M= [];  									% matriz de bits para exibição
V_exibe=4;										% variavel para exibição das ondas (zoom 1 a T-bits)
N_ruido=600; 									% nivel do sinal de ruido
if tipoFonte==2
audio = sqwave;
end

if((V_exibe > T_bits) || (V_exibe <1))
	V_exibe=1;
endif

for i=1:length(bit_stream)					
    bit_M = [bit_M bit_stream(i)*ones(1,M)];	% gera 32 'bits' para cada bit
end


p_M(1:(M/2)+1)=-1; p_M((M/2)+1:M)=1;        	% pulso mancheter para 1 a 17 = -1 e para 17 até 32 = 1
p_NRZ(1:M)=1;									% são todos = 1 (32 uns)

tipoCod = input("\nEscolha o tipo de codificacao que deseja exibir e depois pressione [ENTER]:\n[1] Manchester\n[2] NRZ L\n"); %[3] Unipolar RZ\n[4] Polar NRZ\n[5] Polar RZ\n[6] AMI NRZ\n[7] AMI RZ\n"
	codificacao
	
if tipoFonte == 1
	tipoMod=input("\nEscolha o tipo de modulação que deseja exibir e depois pressione [ENTER]:\n[1] Modulação QPSK\n[2] Modulação ASK\n[3] Modulação BPSK\n");
else
    tipoMod=3;
endif	

	modulacao
	transmissao
	recepcao 
	demodulacao
	decodificacao


%-------------------------------------------
% Decodificação de Fonte
%-------------------------------------------
palavraRec="";
temp="";
j=1;

if (tipoFonte == 1)
for i=1:length(bitRec)
	if(bitRec(i)==0)
		temp=strcat(temp,"0");
	else
		temp=strcat(temp,"1");
	endif
	j++;
	if(j==9)
		palavraRec = strcat(palavraRec,bin2dec(temp));
		j=1;
		temp="";
	endif
endfor

printf("\n\nEsta foi a palavra recuperada: ");
palavraRec

else
 wavwrite(audio,FS,"ArquivoRecebido.wav");
 printf("\n\nArquivo de audio recebido corretamente!\n");
endif


